home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga Plus 1997 #3
/
Amiga Plus CD - 1997 - No. 03.iso
/
pd
/
programmierung
/
alienbreed3d2_src
/
shadow.s
< prev
next >
Wrap
Text File
|
1997-01-31
|
34KB
|
2,236 lines
* the 'Hello World' program in 68000 Assembler
* the C version can be found in the Intuition manual
* this source code (C) HiSoft 1992 All Rights Reserved
* for Devpac Amiga Version 2 the following symbols were changed
* to avoid clashes with the new include files:
* Screen->MyScreen, NewScreen->MyNewScreen
* Window->MyWindow, NewWindow->MyNewWindow
opt c+,d+
include workbench:utilities/devpac/system use pre-assembled header
include exec/exec_lib.i
include intuition/intuition.i
include intuition/intuition_lib.i
include graphics/graphics_lib.i
include graphics/text.i
INTUITION_REV equ 31 v1.1
GRAPHICS_REV equ 31 v1.1
* Open the intuition library
moveq #100,d4 default error return code
moveq #INTUITION_REV,d0 version
lea int_name(pc),a1
CALLEXEC OpenLibrary
tst.l d0
beq exit_false if failed then quit
move.l d0,_IntuitionBase else save the pointer
moveq #GRAPHICS_REV,d0
lea graf_name(pc),a1
CALLEXEC OpenLibrary
tst.l d0
; beq exit_closeint if failed then close Int, exit
move.l d0,_GfxBase
lea MyNewScreen(pc),a0
CALLINT OpenScreen open a screen
tst.l d0
; beq exit_closeall if failed the close both, exit
move.l d0,MyScreen
move.l MyScreen,a0
lea sc_BitMap(a0),a0
lea bm_Planes(a0),a0
move.l #RAWSCRN,(a0)
move.l #RAWSCRN+10240,4(a0)
move.l #RAWSCRN+10240*2,8(a0)
move.l #RAWSCRN+10240*3,12(a0)
move.l #RAWSCRN+10240*4,16(a0)
move.l #RAWSCRN+10240*5,20(a0)
move.l #RAWSCRN+10240*6,24(a0)
move.l #RAWSCRN+10240*7,28(a0)
* now initialise a NewWindow structure. This is normally easier to
* do with dc.w/dc.l statement etc, but for comparison with the C
* version we do it like this
lea MyNewWindow(pc),a0 good place to start
move.w #20,nw_LeftEdge(a0)
move.w #20,nw_TopEdge(a0)
move.w #300,nw_Width(a0)
move.w #100,nw_Height(a0)
move.b #0,nw_DetailPen(a0)
move.b #1,nw_BlockPen(a0)
move.l #window_title,nw_Title(a0)
_temp set WINDOWCLOSE!SMART_REFRESH!ACTIVATE!WINDOWSIZING
move.l #_temp!WINDOWDRAG!WINDOWDEPTH,nw_Flags(a0)
move.l #CLOSEWINDOW,nw_IDCMPFlags(a0)
move.w #CUSTOMSCREEN,nw_Type(a0)
clr.l nw_FirstGadget(a0)
clr.l nw_CheckMark(a0)
move.l MyScreen(pc),nw_Screen(a0)
clr.l nw_BitMap(a0)
move.w #100,nw_MinWidth(a0)
move.w #25,nw_MinHeight(a0)
move.w #640,nw_MaxWidth(a0)
move.w #200,nw_MaxHeight(a0)
* thats it set up, now open the window (a0=NewWindow already)
; CALLINT OpenWindow
; tst.l d0
; beq exit_closescr if failed
; move.l d0,MyWindow save it
;
; move.l d0,a1 window
; move.l wd_RPort(a1),a1 rastport
; moveq #20,d0 X
; moveq #20,d1 Y
; CALLGRAF Move move the cursor
;
; move.l MyWindow(pc),a0
; move.l wd_RPort(a0),a1 rastport
; lea hello_message(pc),a0
; moveq #11,d0
; CALLGRAF Text print something
;
; move.l MyWindow(pc),a0
; move.l wd_UserPort(a0),a0
; move.b MP_SIGBIT(a0),d1 (misprint in manual)
; moveq #0,d0
; bset d1,d0 do a shift
; CALLEXEC Wait
; moveq #0,d4 return code
* various exit routines that do tidying up, given a return code in d4
; move.l MyWindow(pc),a0
; CALLINT CloseWindow
;exit_closescr
; move.l MyScreen(pc),a0
; CALLINT CloseScreen
;exit_closeall
; move.l _GfxBase(pc),a1
; CALLEXEC CloseLibrary
;exit_closeint
; move.l _IntuitionBase(pc),a1
; CALLEXEC CloseLibrary
;done:
; bra done
move.l #PALETTEBIT,a0
move.l #COPIEDPAL+4,a1
move.w #255,d0
copydown:
move.b 1(a0),(a1)
move.b 3(a0),4(a1)
move.b 5(a0),8(a1)
add.w #6,a0
add.w #12,a1
dbra d0,copydown
move.w #256,COPIEDPAL
move.w #0,COPIEDPAL+2
LOOKFORME:
move.l MyScreen,a0
lea sc_ViewPort(a0),a0
move.l #COPIEDPAL,a1
move.l _GfxBase,a6
jsr -$372(a6)
move.l MyScreen,a4
move.w sc_MouseX(a4),d0
move.w sc_MouseY(a4),d1
move.w d0,OLDXM
move.w d1,OLDYM
loop:
move.l MyScreen,a4
move.w sc_MouseX(a4),d0
move.w sc_MouseY(a4),d1
sub.w OLDXM,d0
sub.w OLDYM,d1
add.w d0,OLDXM
add.w d1,OLDYM
; btst #6,$bfe001
; beq.s .SHIFTABOUT
muls #8190,d0
divs #160,d0
add.w d0,YANG
and.w #8190,YANG
muls #8190,d1
divs #160,d1
and.w #8190,d1
add.w d1,XANG
and.w #8190,XANG
add.w #40,AANG
add.w #70,BANG
and.w #8191,AANG
and.w #8191,BANG
add.w #60,CANG
add.w #90,DANG
and.w #8191,CANG
and.w #8191,DANG
bra .ROTABOUT
.SHIFTABOUT
add.w d0,XOFF
add.w d1,ZOFF
.ROTABOUT
************************************************
************************************************
************************************************
************************************************
************************************************
************************************************
************************************************
************************************************
************************************************
************************************************
************************************************
************************************************
************************************************
************************************************
*SHADOW BUFFER CALCULATION
move.w #254,HIGHPOLY
move.l #POLYGONDATA,a0
move.w (a0)+,d7 ; number of polys
POLYGONLOOPSHAD:
move.l d7,-(a7)
move.w (a0)+,TEXTUREADD
move.w (a0)+,d6
move.w (a0)+,TRANSTEXT
move.l #ROTATEDPTS,a2
move.l #UVCOORDS,a3
move.w AANG,d1
move.w BANG,d3
cmp.w #2,d6
bne.s .notsecrot
move.w CANG,d1
move.w DANG,d3
.notsecrot
move.l #SINETABLE,a1
move.w (a1,d1.w),XSIN ;xsin
move.w (a1,d3.w),YSIN ;ysin
add.w #2048,a1
move.w (a1,d1.w),XCOS ;xcos
move.w (a1,d3.w),YCOS ;ycos
moveq #3,d7
tst.w d6
beq NOROTATESHAD
ROTPTLOPSHAD:
move.w (a0)+,d0
move.w d0,d3
move.w (a0)+,d1
move.w (a0)+,d2
move.w d2,d5
muls YCOS,d0
muls YSIN,d2
sub.l d2,d0
asr.l #6,d0 ; new x*512
muls YSIN,d3
muls YCOS,d5
add.l d5,d3
add.l d3,d3
swap d3
move.w d3,d2 ; new z
move.w d1,d4
move.w d2,d5
muls XCOS,d1
muls XSIN,d2
sub.l d2,d1
asr.l #6,d1 ; new y*512
muls XSIN,d4
muls XCOS,d5
add.l d5,d4
add.l d4,d4
swap d4
move.w d4,d2 ; new z
ext.l d2
move.w XOFF,d5
ext.l d5
asl.l #8,d5
add.l d5,d5
add.l d5,d0
move.l d0,(a2)+
move.l d1,(a2)+
move.l d2,(a2)+
addq #4,a2
move.l (a0)+,(a3)+
dbra d7,ROTPTLOPSHAD
bra ROTATEDSHAD
NOROTATESHAD:
move.w (a0)+,d0
move.w (a0)+,d1
move.w (a0)+,d2
ext.l d0
ext.l d1
ext.l d2
asl.l #8,d0
asl.l #8,d1
asl.l #1,d0
asl.l #1,d1
move.l d0,(a2)+
move.l d1,(a2)+
move.l d2,(a2)+
addq #4,a2
move.l (a0)+,(a3)+
dbra d7,NOROTATESHAD
ROTATEDSHAD:
move.l a0,-(a7)
moveq #3,d7
move.l #ROTATEDPTS,a0
move.l #20000,d3 ;top
move.l #-20000,d4 ;bottom
move.l #-5000,d5
FINDTB:
move.l 8(a0),d0
asr.l #2,d0
cmp.l d0,d3
ble.s .oktop
move.l d0,d3
.oktop:
cmp.l d0,d4
bge.s .okbot
move.l d0,d4
.okbot:
move.l 4(a0),d0
asr.l #8,d0
asr.l #3,d0
cmp.l d0,d5
bgt.s .okhigh
move.l d0,d5
.okhigh:
adda.w #16,a0
dbra d7,FINDTB
; add.w #128,d5
; move.w d5,HIGHPOLY
add.w #128,d3
add.w #128,d4
move.w d3,TOPLINE
move.w d4,BOTLINE
move.w #0,d0
move.w #1,d1
bsr SIMPLESHADLINE
move.w #1,d0
move.w #2,d1
bsr SIMPLESHADLINE
move.w #2,d0
move.w #3,d1
bsr SIMPLESHADLINE
move.w #3,d0
move.w #0,d1
bsr SIMPLESHADLINE
***********************************************
* Draw the shadow polygon
move.l #SHADOWBUFFER,a2
move.l #LEFTUVS,a0
move.w TOPLINE,d0
move.w BOTLINE,d1
sub.w d0,d1
asl.w #3,d0
add.w d0,a0
muls #(256/8),d0
add.l d0,a2 ; pointer to screen line.
subq #1,d1
blt NOPOLYGONSHAD
DOAHORLINESHAD:
swap d1
move.w RIGHTUVS-LEFTUVS(a0),d0
move.w (a0)+,d7
sub.w d7,d0
blt NOPOLYGONSHAD
move.l a2,-(a7)
; asr.w #2,d0
; asr.w #2,d7
add.w d7,a2
ext.l d0
addq #1,d0
move.w RIGHTUVS-LEFTUVS(a0),d7
move.w (a0)+,d4
swap d7
clr.w d7
swap d4
clr.w d4
sub.l d4,d7
divs.l d0,d7
move.l d7,a5
move.w RIGHTUVS-LEFTUVS(a0),d7
swap d7
clr.w d7
move.w (a0)+,d5
swap d5
clr.w d5
sub.l d5,d7
divs.l d0,d7
move.l d7,a6
move.w RIGHTUVS-LEFTUVS(a0),d7
swap d7
clr.w d7
move.w (a0)+,d6
swap d6
clr.w d6
sub.l d6,d7
divs.l d0,d7
move.l d7,a3
move.l a0,-(a7)
move.l d1,-(a7)
move.l #TEXTURES,a0
move.w TEXTUREADD,d7
bge.s .okaddtes
and.w #$7fff,d7
add.l #65536,a0
.okaddtes:
add.w d7,a0
move.w #0,d7
subq #1,d0
; d0=xdist
; d4=U a5=DU
; d5=V a6=DV
; d6=Y a3=DY
moveq #0,d1
PLOTADOT:
.across
swap d4
swap d5
move.w d4,d2
lsl.w #8,d2
swap d4
move.b d5,d2
add.l a5,d4
swap d5
add.l a6,d5
swap d6
move.b (a2)+,d1
tst.b (a0,d2.w*4)
beq.s .noplt
cmp.w d1,d6
bgt.s .noplt
move.b d6,-1(a2)
.noplt:
swap d6
.noplty
add.l a3,d6
dbra d0,.across
move.l (a7)+,d1
move.l (a7)+,a0
move.l (a7)+,a2
.noline:
add.w #256,a2
swap d1
dbra d1,DOAHORLINESHAD
NOPOLYGONSHAD:
***********************************************
move.l (a7)+,a0
move.l (a7)+,d7
sub.w #1,HIGHPOLY
dbra d7,POLYGONLOOPSHAD
************************************************
************************************************
************************************************
************************************************
************************************************
************************************************
************************************************
************************************************
************************************************
************************************************
************************************************
************************************************
************************************************
************************************************
************************************************
************************************************
************************************************
move.w #254,HIGHPOLY
move.l #POLYGONDATA,a0
move.w (a0)+,d7 ; number of polys
POLYGONLOOP:
move.l d7,-(a7)
move.w (a0)+,TEXTUREADD
move.w (a0)+,d6
move.w d6,SPINAROUND
move.w (a0)+,TRANSTEXT
move.l #ROTATEDPTS,a2
move.l #UVCOORDS,a3
move.w AANG,d1
move.w BANG,d3
cmp.w #2,d6
bne.s .notsecrot
move.w CANG,d1
move.w DANG,d3
.notsecrot
move.l #SINETABLE,a1
move.w (a1,d1.w),XSIN ;xsin
move.w (a1,d3.w),YSIN ;ysin
add.w #2048,a1
move.w (a1,d1.w),XCOS ;xcos
move.w (a1,d3.w),YCOS ;ycos
moveq #3,d7
move.w d6,d0
move.l #-5000,d6
tst.w d0
beq NOROTATE
ROTPTLOP:
move.w (a0)+,d0
move.w d0,d3
move.w (a0)+,d1
move.w (a0)+,d2
move.w d2,d5
muls YCOS,d0
muls YSIN,d2
sub.l d2,d0
asr.l #6,d0 ; new x*512
muls YSIN,d3
muls YCOS,d5
add.l d5,d3
add.l d3,d3
swap d3
move.w d3,d2 ; new z
move.w d1,d4
move.w d2,d5
muls XCOS,d1
muls XSIN,d2
sub.l d2,d1
asr.l #6,d1 ; new y*512
muls XSIN,d4
muls XCOS,d5
add.l d5,d4
add.l d4,d4
swap d4
move.w d4,d2 ; new z
ext.l d2
move.w XOFF,d5
ext.l d5
asl.l #8,d5
add.l d5,d5
add.l d5,d0
move.l d0,(a2)+
move.l d1,(a2)+
move.l d2,(a2)+
addq #4,a2
move.l d1,d5
asr.l #8,d5
asr.l #3,d5
cmp.w d5,d6
bgt.s .okhigh
move.w d5,d6
.okhigh:
move.l (a0)+,(a3)+
dbra d7,ROTPTLOP
bra ROTATED
NOROTATE:
move.w (a0)+,d0
move.w (a0)+,d1
move.w (a0)+,d2
ext.l d0
ext.l d1
ext.l d2
asl.l #8,d0
asl.l #8,d1
asl.l #1,d0
asl.l #1,d1
move.l d0,(a2)+
move.l d1,(a2)+
move.l d2,(a2)+
addq #4,a2
move.l (a0)+,(a3)+
move.l d1,d5
asr.l #8,d5
asr.l #3,d5
cmp.w d5,d6
bgt.s .okhigh
move.w d5,d6
.okhigh:
dbra d7,NOROTATE
ROTATED:
; add.w #128,d6
; move.w d6,HIGHPOLY
move.l a0,-(a7)
sub.l #10*4,a0
move.w XANG,d1
move.w YANG,d3
move.l #SINETABLE,a1
move.w (a1,d1.w),XSIN2 ;xsin
move.w (a1,d3.w),YSIN2 ;ysin
add.w #2048,a1
move.w (a1,d1.w),XCOS2 ;xcos
move.w (a1,d3.w),YCOS2 ;ycos
moveq #3,d7
; move.l #ROTATEDPTS,a0
move.l #ONSCREENPTS,a1
move.l FASTBUFFER,a2
move.w #20000,d3 ;top
move.w #-20000,d4 ;bottom
move.w #-5000,d5
CONVTOSCREEN:
movem.l d3-d5,-(a7)
move.w (a0)+,d0
move.w d0,d3
move.w (a0)+,d1
move.w (a0)+,d2
addq #4,a0
move.w d2,d5
tst.w SPINAROUND
beq.s .NOSPIN
muls YCOS,d0
muls YSIN,d2
sub.l d2,d0
add.l d0,d0
swap d0
; asr.l #6,d0 ; new x*512
muls YSIN,d3
muls YCOS,d5
add.l d5,d3
add.l d3,d3
swap d3
move.w d3,d2 ; new z
move.w d1,d4
move.w d2,d5
muls XCOS,d1
muls XSIN,d2
sub.l d2,d1
add.l d1,d1
swap d1
muls XSIN,d4
muls XCOS,d5
add.l d5,d4
add.l d4,d4
swap d4
move.w d4,d2 ; new z
move.w d0,d3
move.w d2,d5
.NOSPIN
muls YCOS2,d0
muls YSIN2,d2
sub.l d2,d0
asr.l #6,d0 ; new x*512
muls YSIN2,d3
muls YCOS2,d5
add.l d5,d3
add.l d3,d3
swap d3
move.w d3,d2 ; new z
move.w d1,d4
move.w d2,d5
muls XCOS2,d1
muls XSIN2,d2
sub.l d2,d1
asr.l #6,d1 ; new y*512
muls XSIN2,d4
muls XCOS2,d5
add.l d5,d4
add.l d4,d4
swap d4
move.w d4,d2 ; new z
; 3 7 15 21 35 45
ext.l d2
movem.l (a7)+,d3-d5
; move.l (a0)+,d0
; move.l (a0)+,d1
; move.l (a0)+,d2
; move.l d1,d6
; asr.l #8,d6
; asr.l #3,d6
; cmp.w d6,d5
; bgt.s .okhigh
; move.w d6,d5
;.okhigh:
add.w ZOFF,d2
ext.l d2
; addq #4,a0
add.l d0,d0
add.l d1,d1
divs d2,d0
divs d2,d1
add.w #160*4,d0
add.w #128*4,d1
move.w d0,(a1)+
move.w d1,(a1)+
asr.w #2,d1
cmp.w d1,d3
ble.s .oktop
move.w d1,d3
.oktop
cmp.w d1,d4
bge.s .okbot
move.w d1,d4
.okbot:
; ext.l d0
; ext.l d1
; asr.l #2,d0
; and.b #%11111100,d1
; asl.l #4,d1
; move.l d1,d2
; asl.l #2,d1
; add.l d2,d1
; add.l d1,d0
;
; move.b #255,(a2,d0.l)
dbra d7,CONVTOSCREEN
move.w d3,TOPLINE
move.w d4,BOTLINE
move.l #ONSCREENPTS,a1
move.w (a1),d0 ;x1
sub.w 4(a1),d0
move.w 8(a1),d2
sub.w 4(a1),d2
move.w 2(a1),d1 ;x1
sub.w 6(a1),d1
move.w 10(a1),d3
sub.w 6(a1),d3
muls d2,d1
muls d0,d3
sub.l d3,d1
ble NOPOLYGON
move.l #ROTATEDPTS,a1
move.l (a1),d3
sub.l 16(a1),d3
asr.l #8,d3
asr.l #1,d3
move.l 4(a1),d4
sub.l 16+4(a1),d4
asr.l #8,d4
asr.l #1,d4
move.l 8(a1),d5
sub.l 16+8(a1),d5
move.w d3,d6
muls d6,d6
move.w d4,d7
muls d7,d7
add.l d7,d6
move.w d5,d7
muls d7,d7
add.l d7,d6
move.l d6,d2
bsr CALCSQROOT
move.w d2,LEN1
move.l 32(a1),d0
sub.l 16(a1),d0
asr.l #8,d0
asr.l #1,d0
move.l 32+4(a1),d1
sub.l 16+4(a1),d1
asr.l #8,d1
asr.l #1,d1
move.l 32+8(a1),d2
sub.l 16+8(a1),d2
muls d2,d3
muls d0,d5
sub.l d3,d5 ; length
muls.l #25,d5
muls d0,d0
muls d1,d1
muls d2,d2
add.l d0,d1
add.l d1,d2
bsr CALCSQROOT
muls LEN1,d2
divs.l d2,d5
tst.l d5
ble.s .okbr
moveq #0,d5
.okbr:
add.w #25,d5
asl.w #8,d5
move.w d5,BRIGHTNESS
move.w #0,d0
move.w #1,d1
bsr SIMPLECALCLINE
move.w #1,d0
move.w #2,d1
bsr SIMPLECALCLINE
move.w #2,d0
move.w #3,d1
bsr SIMPLECALCLINE
move.w #3,d0
move.w #0,d1
bsr SIMPLECALCLINE
***********************************************
* Draw the polygon (shadowed).
move.l FASTBUFFER,a2
move.l #LEFTUVS,a0
move.w TOPLINE,d0
move.w BOTLINE,d1
sub.w d0,d1
asl.w #4,d0
add.w d0,a0
muls #(320/16),d0
add.l d0,a2 ; pointer to screen line.
subq #1,d1
blt NOPOLYGON
DOAHORLINE:
swap d1
move.w RIGHTUVS-LEFTUVS(a0),d0
move.w (a0)+,d7
sub.w d7,d0
bge.s .okflibble
add.w #14,a0
add.w #320,a2
swap d1
dbra d1,DOAHORLINE
bra NOPOLYGON
.okflibble:
move.l a2,-(a7)
asr.w #2,d0
asr.w #2,d7
add.w d7,a2
ext.l d0
addq #1,d0
move.l RIGHTUVS-LEFTUVS(a0),d7
move.l (a0)+,d2
sub.l d2,d7
divs.l d0,d7
move.l d7,a1
move.l RIGHTUVS-LEFTUVS(a0),d7
move.l (a0)+,d3
sub.l d3,d7
divs.l d0,d7
move.l d7,a4
move.w RIGHTUVS-LEFTUVS(a0),d7
move.w (a0)+,d4
swap d7
clr.w d7
swap d4
clr.w d4
sub.l d4,d7
divs.l d0,d7
move.l d7,a5
move.w RIGHTUVS-LEFTUVS(a0),d7
swap d7
clr.w d7
move.w (a0)+,d5
swap d5
clr.w d5
sub.l d5,d7
divs.l d0,d7
move.l d7,a6
move.w RIGHTUVS-LEFTUVS(a0),d7
swap d7
clr.w d7
move.w (a0)+,d6
swap d6
clr.w d6
sub.l d6,d7
divs.l d0,d7
move.l d7,a3
move.l a0,-(a7)
move.l d1,-(a7)
move.l #TEXTURES,a0
move.w TEXTUREADD,d7
bge.s .okaddtes
and.w #$7fff,d7
add.l #65536,a0
.okaddtes:
add.w d7,a0
move.w #0,d7
move.w BRIGHTNESS,a6
move.l a7,SAVESTACK
move.l #SHADOWBUFFER,a7
subq #1,d0
; d0=xdist
; d2=U a1=DU
; d3=V a4=DV
; d4=X a5=DX
; d5=Y a6=DY
; d6=Z a3=DZ
move.w HIGHPOLY,d5
.across
moveq #0,d1
swap d6
move.w d6,d1
lsl.w #8,d1
swap d4
move.b d4,d1
swap d4
swap d6
add.l a5,d4
add.l a3,d6
moveq #0,d7
; swap d5
move.b (a7,d1.l),d7
cmp.w d7,d5
ble.s .noshad
move.w #$1900,d7
swap d2
move.w d2,d1
asl.w #8,d1
swap d3
move.b d3,d1
swap d2
; and.w #$3f3f,d1
swap d3
add.l a1,d2
add.l a4,d3
move.b (a0,d1.w*4),d7
beq.s .noplottt
move.b TEXTUREPAL(pc,d7.w),(a2)+
dbra d0,.across
bra.s .PASTAC
.noshad:
; swap d5
; add.l a6,d5
move.w a6,d7
swap d2
move.w d2,d1
asl.w #8,d1
swap d3
move.b d3,d1
swap d2
and.w #$3f3f,d1
swap d3
add.l a1,d2
add.l a4,d3
move.b (a0,d1.w*4),d7
beq.s .noplottt
move.b TEXTUREPAL(pc,d7.w),(a2)+
dbra d0,.across
bra.s .PASTAC
.noplottt:
addq #1,a2
dbra d0,.across
.PASTAC
move.l SAVESTACK,a7
move.l (a7)+,d1
move.l (a7)+,a0
move.l (a7)+,a2
.noline:
add.w #320,a2
swap d1
dbra d1,DOAHORLINE
bra NOPOLYGON
TEXTUREPAL: incbin "ab3:includes/newtexturemaps.pal"
SAVESTACK: dc.l 0
HIGHPOLY: dc.w 0
LEN1: dc.w 0
BRIGHTNESS: dc.l 0
TRANSTEXT: dc.w 0
AANG: dc.w 0
BANG: dc.w 0
CANG: dc.w 0
DANG: dc.w 0
NOPOLYGON:
***********************************************
move.l (a7)+,a0
move.l (a7)+,d7
sub.w #1,HIGHPOLY
dbra d7,POLYGONLOOP
btst #6,$bfe001
beq.s .SHOWSHADOW
move.l FASTBUFFER,a0
add.l #40*320+64,a0
move.l #RAWSCRN+40*40+8,a1
move.l #(24)-1,d0
move.l #175,d1
move.w #128,d2
move.w #16,d3
moveq #0,d4
moveq #0,d5
jsr CHUNKYTOPLANAR
bra .SHOWNSCRN
.SHOWSHADOW
move.l #SHADOWBUFFER,a0
add.l #40*256,a0
move.l #RAWSCRN+40*40,a1
move.l #(256/8)-1,d0
move.l #175,d1
move.w #0,d2
move.w #8,d3
moveq #0,d4
moveq #0,d5
jsr CHUNKYTOPLANAR
.SHOWNSCRN:
move.l FASTBUFFER,a0
add.l #40*320,a0
move.w #((320*176)/64)-1,d0
moveq #0,d1
clrchunk:
move.l d1,(a0)+
move.l d1,(a0)+
move.l d1,(a0)+
move.l d1,(a0)+
move.l d1,(a0)+
move.l d1,(a0)+
move.l d1,(a0)+
move.l d1,(a0)+
move.l d1,(a0)+
move.l d1,(a0)+
move.l d1,(a0)+
move.l d1,(a0)+
move.l d1,(a0)+
move.l d1,(a0)+
move.l d1,(a0)+
move.l d1,(a0)+
dbra d0,clrchunk
move.l #SHADOWBUFFER,a0
move.l #-1,d1
move.l #-1,d2
move.w #15,d0
clrshad:
move.w #15,d5
innner
move.l d2,(a0)+
move.l d2,(a0)+
move.l d2,(a0)+
move.l d2,(a0)+
move.l d1,(a0)+
move.l d1,(a0)+
move.l d1,(a0)+
move.l d1,(a0)+
move.l d2,(a0)+
move.l d2,(a0)+
move.l d2,(a0)+
move.l d2,(a0)+
move.l d1,(a0)+
move.l d1,(a0)+
move.l d1,(a0)+
move.l d1,(a0)+
move.l d2,(a0)+
move.l d2,(a0)+
move.l d2,(a0)+
move.l d2,(a0)+
move.l d1,(a0)+
move.l d1,(a0)+
move.l d1,(a0)+
move.l d1,(a0)+
move.l d2,(a0)+
move.l d2,(a0)+
move.l d2,(a0)+
move.l d2,(a0)+
move.l d1,(a0)+
move.l d1,(a0)+
move.l d1,(a0)+
move.l d1,(a0)+
move.l d2,(a0)+
move.l d2,(a0)+
move.l d2,(a0)+
move.l d2,(a0)+
move.l d1,(a0)+
move.l d1,(a0)+
move.l d1,(a0)+
move.l d1,(a0)+
move.l d2,(a0)+
move.l d2,(a0)+
move.l d2,(a0)+
move.l d2,(a0)+
move.l d1,(a0)+
move.l d1,(a0)+
move.l d1,(a0)+
move.l d1,(a0)+
move.l d2,(a0)+
move.l d2,(a0)+
move.l d2,(a0)+
move.l d2,(a0)+
move.l d1,(a0)+
move.l d1,(a0)+
move.l d1,(a0)+
move.l d1,(a0)+
move.l d2,(a0)+
move.l d2,(a0)+
move.l d2,(a0)+
move.l d2,(a0)+
move.l d1,(a0)+
move.l d1,(a0)+
move.l d1,(a0)+
move.l d1,(a0)+
dbra d5,innner
exg d1,d2
dbra d0,clrshad
btst #7,$bfe001
beq.s exit_closescr
add.l #$8000,lmxoff
cmp.l #40*65536,lmxoff
blt.s .oksm
sub.l #40*65536,lmxoff
.oksm
bra loop
lmxoff: dc.l 0
exit_closescr
move.l MyScreen(pc),a0
CALLINT CloseScreen
exit_closeall
move.l _GfxBase(pc),a1
CALLEXEC CloseLibrary
exit_closeint
move.l _IntuitionBase(pc),a1
CALLEXEC CloseLibrary
exit_false
move.l #0,d0 return code
rts
*********************************************
CALCSQROOT:
tst.l d2
beq .oksqr
movem.l d0/d1/d3-d7/a0-a6,-(a7)
move.w #31,d0
.findhigh
btst d0,d2
bne .foundhigh
dbra d0,.findhigh
.foundhigh
asr.w #1,d0
clr.l d3
bset d0,d3
move.l d3,d0
move.w d0,d1
muls d1,d1 ; x*x
sub.l d2,d1 ; x*x-a
asr.l #1,d1 ; (x*x-a)/2
divs d0,d1 ; (x*x-a)/2x
sub.w d1,d0 ; second approx
bgt .stillnot0
move.w #1,d0
.stillnot0
move.w d0,d1
muls d1,d1
sub.l d2,d1
asr.l #1,d1
divs d0,d1
sub.w d1,d0 ; second approx
bgt .stillnot02
move.w #1,d0
.stillnot02
move.w d0,d1
muls d1,d1
sub.l d2,d1
asr.l #1,d1
divs d0,d1
sub.w d1,d0 ; second approx
bgt .stillnot03
move.w #1,d0
.stillnot03
move.w d0,d2
ext.l d2
movem.l (a7)+,d0/d1/d3-d7/a0-a6
.oksqr
rts
**********************************************
**********************************************
**********************************************
**********************************************
**********************************************
**********************************************
**********************************************
**********************************************
**********************************************
**********************************************
**********************************************
**********************************************
**********************************************
**********************************************
**********************************************
**********************************************
**********************************************
**********************************************
**********************************************
SIMPLECALCLINE:
move.l #ONSCREENPTS,a1
move.w 2(a1,d0.w*4),d2 ;fy
move.w 2(a1,d1.w*4),d7 ;sy
move.l #RIGHTUVS,a3
asr.w #2,d2
asr.w #2,d7
cmp.w d2,d7
beq .noline
bgt.s .lineonright
.lineonleft:
move.l #LEFTUVS,a3
exg d0,d1
exg d2,d7
.lineonright:
sub.w d2,d7
asl.w #4,d2
add.w d2,a3
move.w d7,YDIFF
move.w (a1,d0.w*4),d3 ;fx
move.w (a1,d1.w*4),d7 ;sx
sub.w d3,d7
swap d3
swap d7
clr.w d3
clr.w d7
divs.l YDIFF-2,d7
move.l d7,a0 ; dx
move.l #UVCOORDS,a2
move.l #ROTATEDPTS,a1
move.w (a2,d0.w*4),d4
move.w 2(a2,d0.w*4),d5
move.w (a2,d1.w*4),d6
move.w 2(a2,d1.w*4),d7
sub.w d4,d6
sub.w d5,d7
swap d4
swap d5
clr.w d4
clr.w d5
swap d6
swap d7
clr.w d6
clr.w d7
divs.l YDIFF-2,d6
divs.l YDIFF-2,d7
move.l d6,a4
move.l d7,a5
asl.w #4,d0
asl.w #4,d1
move.l (a1,d0.w),d6
move.l (a1,d1.w),d7
asl.l #5,d6
asl.l #5,d7
sub.l d6,d7
divs.l YDIFF-2,d7
move.l d7,a2
move.l d6,a6
move.l 4(a1,d0.w),d6
move.l 4(a1,d1.w),d7
asl.l #5,d6
asl.l #5,d7
sub.l d6,d7
divs.l YDIFF-2,d7
exg d7,a6
exg d7,d6
move.l 8(a1,d0.w),d0
move.l 8(a1,d1.w),d1
swap d0
swap d1
clr.w d0
clr.w d1
asr.l #2,d0
asr.l #2,d1
sub.l d0,d1
divs.l YDIFF-2,d1
move.l d1,a1
move.l YDIFF-2,d1
subq #1,d1
; d3=sx a0=dsx
; d4=u a4=du
; d5=v a5=dv
; d6=x a2=dx
; d7=y a6=dy
; d0=z a1=dz
; d1=dsy
add.l #128*65536,d6
add.l #128*65536,d7
add.l #128*65536,d0
.PUTINLINE:
swap d3
move.w d3,(a3)+
swap d3
add.l a0,d3
move.l d4,(a3)+
add.l a4,d4
move.l d5,(a3)+
swap d6
add.l a5,d5
move.w d6,(a3)+
swap d6
swap d7
add.l a2,d6
move.w d7,(a3)+
swap d7
swap d0
add.l a6,d7
move.w d0,(a3)+
swap d0
add.l a1,d0
dbra d1,.PUTINLINE
.noline:
rts
TOPLINE: dc.w 0
BOTLINE: dc.w 0
**********************************************
**********************************************
**********************************************
**********************************************
**********************************************
**********************************************
**********************************************
**********************************************
**********************************************
**********************************************
**********************************************
**********************************************
**********************************************
**********************************************
**********************************************
**********************************************
**********************************************
**********************************************
**********************************************
SIMPLESHADLINE:
move.l #ROTATEDPTS,a1
asl.l #2,d0
asl.l #2,d1
move.l 8(a1,d0.w*4),d2 ;fz
move.l 8(a1,d1.w*4),d7 ;sz
move.l #LEFTUVS,a3
asr.l #2,d2
asr.l #2,d7
cmp.l d2,d7
beq .noline
bgt.s .lineonright
.lineonleft:
move.l #RIGHTUVS,a3
exg d0,d1
exg d2,d7
.lineonright:
sub.w d2,d7
add.w #128,d2
lea (a3,d2.w*8),a3
move.w d7,YDIFF
move.l (a1,d0.w*4),d3 ;fx
move.l (a1,d1.w*4),d7 ;sx
asl.l #5,d3
asl.l #5,d7
sub.l d3,d7
divs.l YDIFF-2,d7
move.l d7,a0 ; dx
move.l #UVCOORDS,a2
move.l #ROTATEDPTS,a1
move.w (a2,d0.w),d4
move.w 2(a2,d0.w),d5
move.w (a2,d1.w),d6
move.w 2(a2,d1.w),d7
sub.w d4,d6
sub.w d5,d7
swap d4
swap d5
clr.w d4
clr.w d5
swap d6
swap d7
clr.w d6
clr.w d7
divs.l YDIFF-2,d6
divs.l YDIFF-2,d7
move.l d6,a4
move.l d7,a5
; asl.w #4,d0
; asl.w #4,d1
move.l 4(a1,d0.w*4),d6
move.l 4(a1,d1.w*4),d7
asl.l #5,d6
asl.l #5,d7
sub.l d6,d7
divs.l YDIFF-2,d7
exg d7,a6
exg d7,d6
move.l YDIFF-2,d1
subq #1,d1
; d3=x a0=dx
; d4=u a4=du
; d5=v a5=dv
; d7=y a6=dy
; d1=dz
move.w HIGHPOLY,d7
add.l #128*65536,d3
; add.l #128*65536,d7
.PUTINLINE:
swap d3
move.w d3,(a3)+
swap d3
add.l a0,d3
swap d4
move.w d4,(a3)+
swap d4
swap d5
add.l a4,d4
move.w d5,(a3)+
swap d5
add.l a5,d5
; swap d7
move.w d7,(a3)+
; swap d7
; add.l a6,d7
dbra d1,.PUTINLINE
.noline:
rts
dc.w 0
YDIFF: dc.w 0
SPINAROUND: dc.w 0
XCOS: dc.w 0
YCOS: dc.w 0
XSIN: dc.w 0
YSIN: dc.w 0
XCOS3: dc.w 0
YCOS3: dc.w 0
XSIN3: dc.w 0
YSIN3: dc.w 0
XCOS2: dc.w 0
YCOS2: dc.w 0
XSIN2: dc.w 0
YSIN2: dc.w 0
XADD: dc.l 0
YADD: dc.l 0
ZADD: dc.l 0
XOFF: dc.w 0
YOFF: dc.w 0
OLDXM: dc.w 0
OLDYM: dc.w 0
TEXTUREADD: dc.w 0
CALCLINE:
moveq #0,d2
moveq #0,d3
moveq #0,d4
moveq #0,d5
move.l #UVCOORDS,a0
move.w (a0,d0.w*4),d2
swap d2
move.w 2(a0,d0.w*4),d3
swap d3
move.w (a0,d1.w*4),d4
swap d4
move.w 2(a0,d1.w*4),d5
swap d5
move.l #ONSCREENPTS,a1
move.w 2(a1,d0.w*4),d6 ; ly
move.w 2(a1,d1.w*4),d7 ; ry
asr.w #2,d6
move.l #LEFTRIGHT+2,a2
move.l #RIGHTUVS,a3
asr.w #2,d7
cmp.w d6,d7
beq .noline
bgt.s .lineonright
.lineonleft:
move.l #LEFTUVS,a3
subq #2,a2
exg d6,d7
exg d0,d1
exg d2,d4
exg d3,d5
***********
* THROW AWAY ABOVE FOR NOW.
***********
.lineonright:
sub.w d6,d7
lea (a2,d6.w*4),a2
movem.l d0-d7/a0-a6,-(a7)
move.l #SUBSTACK,a0
asl.w #2,d0
asl.w #2,d1
move.l #ROTATEDPTS,a1
move.l a0,a2
move.l 4(a1,d0.w*4),(a2)+ ;ty
move.l 8(a1,d0.w*4),(a2)+ ;tz
move.l 4(a1,d1.w*4),(a2)+ ;by
move.l 8(a1,d1.w*4),(a2)+ ;bz
move.l d2,(a2)+ ;tu
move.l d3,(a2)+ ;tv
move.l d4,(a2)+ ;bu
move.l d5,(a2)+ ;bv
move.l (a1,d0.w*4),(a2)+ ;tx
move.l (a1,d1.w*4),(a2)+ ;bx
move.l #0,a5
bsr SUBDIVIDE
move.l a5,MAXSUB
movem.l (a7)+,d0-d7/a0-a6
move.w (a1,d0.w*4),d2
move.w 2(a1,d0.w*4),d3
move.w (a1,d1.w*4),d4
move.w 2(a1,d1.w*4),d5
sub.w d2,d4 ;dx
sub.w d3,d5 ;dy
;d7=ddy
subq #1,d7
swap d4
clr.w d4
swap d2
clr.w d2
asl.l #2,d4
ext.l d5
divs.l d5,d4 ;dx/dy
.putinleftline
swap d2
move.w d2,(a2)
addq #4,a2
swap d2
add.l d4,d2
dbra d7,.putinleftline
.noline:
rts
MAXSUB: dc.l 0
SUBDIVIDE:
add.l #1,a5
move.l (a0),d0
move.l d0,d4
move.l 4(a0),d1
divs d1,d0
move.l 8(a0),d2
add.l d2,d4
and.b #%11111100,d0
move.l d2,40+8(a0)
add.w #128*4,d0
move.l 12(a0),d3
asr.l #1,d4 ; middle y
move.l d3,40+12(a0)
divs d3,d2
and.b #%11111100,d2
add.w #128*4,d2
move.l d1,12(a3,d0.w*4)
move.l d3,12(a3,d2.w*4)
add.l d1,d3
asr.l #1,d3
move.l 16(a0),d5
move.l d5,(a3,d0.w*4)
move.l 24(a0),d6
move.l d6,24+40(a0)
add.l d6,d5
asr.l #1,d5
move.l d5,(a3,d2.w*4)
move.l 20(a0),d6
move.l d6,4(a3,d0.w*4)
move.l 28(a0),d7
move.l d7,28+40(a0)
add.l d7,d6
asr.l #1,d6
move.l d7,4(a3,d2.w*4)
move.l 32(a0),d7
move.l d7,8(a3,d0.w*4)
move.l 36(a0),d1
move.l d1,36+40(a0)
add.l d1,d7
asr.l #1,d7
move.l d1,8(a3,d2.w*4)
sub.w d0,d2
sub.w #4,d2
ble.s .nomore
move.l d4,40(a0) ;my
move.l d4,8(a0)
move.l d3,40+4(a0) ;mz
move.l d3,12(a0)
move.l d5,40+16(a0)
move.l d5,16+8(a0)
move.l d6,40+20(a0)
move.l d6,20+8(a0)
move.l d7,40+32(a0)
move.l d7,36(a0)
add.l #40,a0
bsr SUBDIVIDE
sub.l #1,a5
sub.l #40,a0
bsr SUBDIVIDE
.nomore
rts
**********************************************************
UVCOORDS: ds.l 4
ROTATEDPTS: ds.l 4*4
ONSCREENPTS: ds.l 4
ZOFF: dc.w 1024
LEFTRIGHT: ds.l 256
POLYGONDATA:
dc.w 27
dc.w $8000+1*256+0
dc.w 0,0
dc.w -200,150,200,0,0
dc.w 0,200,200,63,0
dc.w 0,250,0,63,63
dc.w -200,200,0,0,63
dc.w $8000+0*256+3
dc.w 0,0
dc.w 0,200,200,0,0
dc.w 200,150,200,63,0
dc.w 200,200,0,63,63
dc.w 0,250,0,0,63
dc.w $8000+0*256+3
dc.w 0,0
dc.w -200,200,0,0,0
dc.w 0,250,0,63,0
dc.w 0,200,-200,63,63
dc.w -200,150,-200,0,63
dc.w $8000+1*256+0
dc.w 0,0
dc.w 0,250,0,0,0
dc.w 200,200,0,63,0
dc.w 200,150,-200,63,63
dc.w 0,200,-200,0,63
cr EQU 120
****************************
dc.w 3*256+3
dc.w 2,0
dc.w -cr,cr,cr,0,0
dc.w cr,cr,cr,63,0
dc.w cr,cr,-cr,63,63
dc.w -cr,cr,-cr,0,63
; dc.w $8000+0*256+2
; dc.w 2,0
; dc.w cr,-cr,cr,0,0
; dc.w -cr,-cr,cr,63,0
; dc.w -cr,-cr,-cr,63,63
; dc.w cr,-cr,-cr,0,63
dc.w $8000+0*256+2
dc.w 2,0
dc.w cr,cr,cr,16,16
dc.w cr,-cr,cr,48,16
dc.w cr,-cr,-cr,48,48
dc.w cr,cr,-cr,16,48
dc.w $8000+0*256+2
dc.w 2,0
dc.w -cr,-cr,cr,16,16
dc.w -cr,cr,cr,48,16
dc.w -cr,cr,-cr,48,48
dc.w -cr,-cr,-cr,16,48
dc.w $8000+0*256+2
dc.w 2,0
dc.w -cr,-cr,cr,16,16
dc.w cr,-cr,cr,48,16
dc.w cr,cr,cr,48,48
dc.w -cr,cr,cr,16,48
dc.w $8000+0*256+2
dc.w 2,0
dc.w cr,-cr,-cr,16,16
dc.w -cr,-cr,-cr,48,16
dc.w -cr,cr,-cr,48,48
dc.w cr,cr,-cr,16,48
****************************
th equ 40
ir equ 40
ot equ 80
*****************************
; dc.w 3*256+2
; dc.w 1,0
; dc.w -ir,-ir,-th,0,0
; dc.w ir,-ir,-th,63,0
; dc.w ir,-ir,th,63,15
; dc.w -ir,-ir,th,0,15
dc.w 3*256+2
dc.w 1,0
dc.w ir,-ot,-th,0,0
dc.w ir,ir,-th,63,0
dc.w ir,ir,th,63,15
dc.w ir,-ot,th,0,15
dc.w 3*256+2
dc.w 1,0
dc.w ir,ir,-th,0,0
dc.w -ir,ir,-th,63,0
dc.w -ir,ir,th,63,15
dc.w ir,ir,th,0,15
dc.w 3*256+2
dc.w 1,0
dc.w -ir,ir,-th,0,0
dc.w -ir,-ot,-th,63,0
dc.w -ir,-ot,th,63,15
dc.w -ir,ir,th,0,15
*****************************
*******************
; dc.w 3*256+2
; dc.w 1,0
; dc.w -ot,-ot,-th,0,0
; dc.w ot,-ot,-th,63,0
; dc.w ir,-ir,-th,55,7
; dc.w -ir,-ir,-th,7,7
dc.w 3*256+2
dc.w 1,0
dc.w ot,-ot,-th,63,0
dc.w ot,ot,-th,63,63
dc.w ir,ir,-th,56,55
dc.w ir,-ot,-th,56,0
dc.w 3*256+2
dc.w 1,0
dc.w ot,ot,-th,63,63
dc.w -ot,ot,-th,0,63
dc.w -ir,ir,-th,8,55
dc.w ir,ir,-th,55,55
dc.w 3*256+2
dc.w 1,0
dc.w -ot,ot,-th,0,63
dc.w -ot,-ot,-th,0,0
dc.w -ir,-ot,-th,7,0
dc.w -ir,ir,-th,7,55
**********************
*******************
; dc.w 3*256+2
; dc.w 1,0
; dc.w ot,-ot,th,0,0
; dc.w -ot,-ot,th,63,0
; dc.w -ir,-ir,th,55,7
; dc.w ir,-ir,th,7,7
dc.w 3*256+2
dc.w 1,0
dc.w -ot,-ot,th,63,0
dc.w -ot,ot,th,63,63
dc.w -ir,ir,th,56,55
dc.w -ir,-ot,th,56,0
dc.w 3*256+2
dc.w 1,0
dc.w -ot,ot,th,63,63
dc.w ot,ot,th,0,63
dc.w ir,ir,th,8,55
dc.w -ir,ir,th,55,55
dc.w 3*256+2
dc.w 1,0
dc.w ot,ot,th,0,63
dc.w ot,-ot,th,0,0
dc.w ir,-ot,th,7,0
dc.w ir,ir,th,7,55
**********************
*****************************
dc.w 3*256+2
dc.w 1,0
dc.w -ot,ot,-th,0,0
dc.w ot,ot,-th,63,0
dc.w ot,ot,th,63,15
dc.w -ot,ot,th,0,15
dc.w 3*256+2
dc.w 1,0
dc.w -ot,-ot,-th,0,0
dc.w -ot,ot,-th,63,0
dc.w -ot,ot,th,63,15
dc.w -ot,-ot,th,0,15
dc.w 3*256+2
dc.w 1,0
dc.w ot,-ot,-th,0,0
dc.w ir,-ot,-th,63,0
dc.w ir,-ot,th,63,15
dc.w ot,-ot,th,0,15
dc.w 3*256+2
dc.w 1,0
dc.w -ir,-ot,-th,0,0
dc.w -ot,-ot,-th,63,0
dc.w -ot,-ot,th,63,15
dc.w -ir,-ot,th,0,15
dc.w 3*256+2
dc.w 1,0
dc.w ot,ot,-th,0,0
dc.w ot,-ot,-th,63,0
dc.w ot,-ot,th,63,15
dc.w ot,ot,th,0,15
*****************************
****************************
; dc.w $8000+0*256+2
; dc.w 2,0
; dc.w -cr,-cr,cr,0,0
; dc.w cr,-cr,cr,63,0
; dc.w cr,-cr,-cr,63,63
; dc.w -cr,-cr,-cr,0,63
dc.w 3*256+3
dc.w 2,0
dc.w cr,cr,cr,0,0
dc.w -cr,cr,cr,63,0
dc.w -cr,cr,-cr,63,63
dc.w cr,cr,-cr,0,63
dc.w $8000+0*256+2
dc.w 2,0
dc.w -cr,cr,cr,16,16
dc.w -cr,-cr,cr,48,16
dc.w -cr,-cr,-cr,48,48
dc.w -cr,cr,-cr,16,48
dc.w $8000+0*256+2
dc.w 2,0
dc.w cr,-cr,cr,16,16
dc.w cr,cr,cr,48,16
dc.w cr,cr,-cr,48,48
dc.w cr,-cr,-cr,16,48
dc.w $8000+0*256+2
dc.w 2,0
dc.w -cr,-cr,-cr,16,16
dc.w cr,-cr,-cr,48,16
dc.w cr,cr,-cr,48,48
dc.w -cr,cr,-cr,16,48
dc.w $8000+0*256+2
dc.w 2,0
dc.w cr,-cr,cr,16,16
dc.w -cr,-cr,cr,48,16
dc.w -cr,cr,cr,48,48
dc.w cr,cr,cr,16,48
****************************
SINETABLE:
incbin "ab3:includes/bigsine"
YANG: dc.w 0
XANG: dc.w 0
**********************************************************
* the definition of the screen - note that in assembler you
* MUST get the sizes of these fields correct, by consulting either
* the RKM or the header files
MyNewScreen dc.w 0,0 left, top
dc.w 320,256 width, height
dc.w 8 depth
dc.b 0,1 pens
dc.w 0 viewmodes
dc.w CUSTOMSCREEN type
dc.l MyFont font
dc.l screen_title title
dc.l 0 gadgets
dc.l 0 bitmap
* my font definition
MyFont dc.l font_name
dc.w TOPAZ_SIXTY
dc.b FS_NORMAL
dc.b FPF_ROMFONT
* the variables
_IntuitionBase dc.l 0 Intuition lib pointer
_GfxBase dc.l 0 graphics lib pointer
MyScreen dc.l 0
MyWindow dc.l 0
MyNewWindow ds.b nw_SIZE a buffer
* some strings
int_name INTNAME
graf_name GRAFNAME
hello_message dc.b 'Hello World'
* these are C strings, so have to be null terminated
screen_title dc.b 'My Own Screen',0
font_name dc.b 'topaz.font',0
window_title dc.b 'A Simple Window',0
even
xmouse: dc.w 0
ymouse: dc.w 0
spleen: dc.w 0
lastspleen: dc.w 0
COPIEDPAL:
dc.w 256,0
ds.l 3*256
ds.l 10
SHADOWBUFFER: ds.l 65536/4
PALETTEBIT:
; incbin "256palette"
; dc.w $ffff,$fffe
incbin "ab3:includes/256pal"
include "ab3:source_4000/chunky.s"
willy: ds.w 48
PALS:
ds.l 2*49
FRAME: dc.w 4
FLIBBLE: dc.w 0
FASTBUFFER:
dc.l fasty
fasty: ds.b 320*256
SUBSTACK: ds.l 10*10*10
LEFTUVS: ds.w 8*256
RIGHTUVS: ds.w 8*256
WORLD: incbin "ab3:includes/world"
TWEEN: incbin "ab3:includes/tweenbrightfile"
TEXTURES: incbin "ab3:includes/newtexturemaps"
SECTION BGDROP,code_c
RAWSCRN:
ds.l 2560*8